package com.briup.demo.web;

import com.briup.demo.common.response.Result;
import com.briup.demo.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequiredArgsConstructor
public class TestController {

    // 在本类中需要使用UserService实现类对象
    // 方式一：使用Spring提供的 @Autowired 注解，
    // 能够将IOC容器中维护的UserService类型的对象设置给本属性，会破坏封装性
    // @Autowired
    // 方式二：使用JavaEE提供的 @Resource注解；但是也会破坏封装性
    // @Resource
    private final UserService userService;

    // 方式三：使用@Autowired注解标注属性对应的setter方法；本方式没有破坏封装性
    /*@Autowired
    public void setUserService(UserService userService) {
        this.userService = userService;
    }*/

    // 方式四： 通过构造器方式注入属性值，Spring官方推荐的用法
    // 由于在类中的这些属性对象通常都需要承担 调用方法的职责，所以这些属性对象是必须存在的，
    // 即必须设置值，所以我们可以将这些属性设置为final，
    // 然后结合lombok中的@RequiredArgsConstructor一起自动生成构造器
    /*public TestController(UserService userService) {
        this.userService = userService;
    }*/


    // 如果多个方法都需要编写异常处理的代码，
    // 异常处理的逻辑也相似，那么就会产生大量冗余代码
    @GetMapping("/test")
    public Result<?> test(boolean flag) {
        String test = userService.test(flag);
        return Result.success(test)
                .apply("测试成功");
    }
}
